package com.lv.service.webview

import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.KeyEvent
import android.view.View
import android.view.ViewGroup
import android.webkit.JavascriptInterface
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.LinearLayoutCompat
import androidx.appcompat.widget.PopupMenu
import com.alibaba.android.arouter.facade.annotation.Route
import com.just.agentweb.AgentWeb
import com.just.agentweb.AgentWebView
import com.just.agentweb.DefaultWebClient
import com.lv.common.utils.ARoutUtils
import com.lv.common.utils.StatusBarUtil
import com.lv.common.utils.showToast
import com.lv.service.BuildConfig
import com.lv.service.R


/**
 * 作者： ygx
 * 创建日期：2023/5/9 11:09 AM
 * 签名： 天行健，君子以自强不息；地势坤，君子以厚德载物。
 * -    _              _           _     _   ____  _             _ _
 * -   / \   _ __   __| |_ __ ___ (_) __| | / ___|| |_ _   _  __| (_) ___
 * -  / _ \ | '_ \ / _` | '__/ _ \| |/ _` | \___ \| __| | | |/ _` | |/ _ \
 * - / ___ \| | | | (_| | | | (_) | | (_| |  ___) | |_| |_| | (_| | | (_) |
 * -/_/   \_\_| |_|\__,_|_|  \___/|_|\__,_| |____/ \__|\__,_|\__,_|_|\___/
 * <p>
 * You never know what you can do until you try !
 * ----------------------------------------------------------------
 * 描述：WebActivity
 */
@Route(path = ARoutUtils.WebActivity)
open class WebActivity : AppCompatActivity() {
    //    @Autowired(name = "url")
//    @JvmField
//    var mUrl: String = ""
    private lateinit var mAgentWeb: AgentWeb//agentWeb的对象

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_webview)
//        ARouter.getInstance().inject(this)
//        BarUtils.setStatusBarColor(this, 16777215)
        val viewTop = findViewById<View>(R.id.view_top)
        val llWebview = findViewById<LinearLayoutCompat>(R.id.ll_webview)
        StatusBarUtil.darkMode(this, true)
        StatusBarUtil.immersive(this)
        StatusBarUtil.setHeightAndPadding(this, viewTop)
//        val ivBackWeb = findViewById<AppCompatImageView>(R.id.iv_back_web)
//        val ivFinishWeb = findViewById<AppCompatImageView>(R.id.iv_finish_web)
//        val ivMoreWeb = findViewById<AppCompatImageView>(R.id.iv_more_web)

        mAgentWeb = AgentWeb.with(this)
            .setAgentWebParent(
                llWebview,
                ViewGroup.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.MATCH_PARENT
                )
            )
            .useDefaultIndicator(resources.getColor(com.lv.common.R.color.color_EB613D))
            .setMainFrameErrorView(com.just.agentweb.R.layout.agentweb_error_page, -1)
            .setSecurityType(AgentWeb.SecurityType.STRICT_CHECK)
            .setOpenOtherPageWays(DefaultWebClient.OpenOtherPageWays.ASK)//打开其他应用时，弹窗咨询用户是否前往其他应用
            .interceptUnkownUrl() //拦截找不到相关页面的Scheme
            .createAgentWeb()
            .ready()
            .get()

        val url = intent.getStringExtra("url")
//        if (url.isNullOrEmpty()) {
//            url = mUrl
//        }

        mAgentWeb.urlLoader.loadUrl(url)
//        mAgentWeb.urlLoader.loadUrl("file:///android_asset/test.html")
        //添加js调用native的函数
//        web_view.addJavascriptInterface(this, "android")
        mAgentWeb.jsInterfaceHolder.addJavaObject("android", this)
        //开启webView的调试
        AgentWebView.setWebContentsDebuggingEnabled(BuildConfig.DEBUG)


//        ivBackWeb.setOnClickListener {
//            // true表示AgentWeb处理了该事件
//            if (!mAgentWeb.back()) {
//                finish()
//            }
//        }
//        ivFinishWeb.setOnClickListener { finish() }
//        ivMoreWeb.setOnClickListener { showPoPup(it) }
    }

    @JavascriptInterface
    open fun back() {
        finish()
    }

    /**
     * 处理按键的事件，来响应对应的逻辑
     *
     * @param keyCode 按键keycode
     * @param event   事件
     * @return true 处理
     */
    override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
        return if (mAgentWeb.handleKeyEvent(keyCode, event)) {
            true
        } else super.onKeyDown(keyCode, event)
    }

    /**
     * Activity暂停状态，停止web’的加载
     */
    override fun onPause() {
        mAgentWeb.webLifeCycle.onPause()
        super.onPause()

    }

    /**
     * Activity的resume，同步web的状态resume
     */
    override fun onResume() {
        mAgentWeb.webLifeCycle.onResume()
        super.onResume()
    }

    private var mPopupMenu: PopupMenu? = null

    /**
     * 显示更多菜单
     *
     * @param view 菜单依附在该View下面
     */
    private fun showPoPup(view: View) {
        mPopupMenu = PopupMenu(this, view)
        mPopupMenu?.inflate(R.menu.toolbar_web)
        mPopupMenu?.setOnMenuItemClickListener(mOnMenuItemClickListener)
        mPopupMenu?.show()
    }

    /**
     * 菜单事件
     */
    private val mOnMenuItemClickListener =
        PopupMenu.OnMenuItemClickListener { item ->
            when (item.itemId) {
                R.id.refresh -> {
                    if (mAgentWeb != null) {
                        mAgentWeb.urlLoader.reload() // 刷新
                    }
                    true
                }

                R.id.default_browser -> {
                    if (mAgentWeb != null) {
//                        openBrowser(mAgentWeb.webCreator.webView.url)
                    }
                    true
                }
                else -> false
            }
        }

    companion object {
        fun openUrl(context: Context?, url: String?) {
            if (url.isNullOrEmpty()) {
                showToast("链接有误")
                return
            }
            context?.startActivity(Intent(context, WebActivity::class.java).also {
                it.putExtra("url", url)
            })
        }
    }
}